package com.jelly.web.modules.staff.user.service;

import com.jelly.web.modules.staff.user.domain.User;
import com.jelly.web.modules.staff.user.domain.UserAndRoleAndPermission;
import com.jelly.web.modules.staff.user.domain.UserExample;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @创建人 ql
 * @创建时间 2018-08-17 10:38
 * @项目名称 jelly
 * @功能描述: 用户接口
 **/
public interface IUserService {
    /**
     * 条件查询用户信息
     * @param example
     * @return
     */
    List<User> getUser(UserExample example);

    /**
     * 主键查询用户信息
     * @param userId
     * @return
     */
     User getUser(String  userId);

    /**
     * 新增用户信息
     * @param user
     * @return
     */
     boolean addUser(User user);

    /**
     * 删除用户信息（并删除用户角色关联）
     * @param userId
     * @return
     */
     boolean delectUser(String userId);

    /**
     * 批量删除用户信息（并删除用户角色关联）
     * @param userId
     * @return
     */
     boolean delectsUser(List<String> userId);
    /**
     * 获取所有用户信息
     * @param user
     * @return
     */
     List<User> getUser(User user);
    /**
     * 通过登陆账号查询用户信息
     * @param loginAccount
     * @return
     */
     User getLoginAccount(String loginAccount);

    /**
     * 通过登陆账号查询用户信息(该方法只允许在登录时使用)
     * @param loginAccount
     * @return
     */
     User getLoginAccount(String loginAccount, String password);

    /**
     * 主键修改用户信息
     * @param user
     * @return
     */
     boolean updateUser(User user);

    /**
     * 修改密码
     * @param user
     * @return
     */
     int updatePassword(User user,String newPassword);

    /**
     * 批量修改用户信息.
     * @param userIds
     * @param user
     * @return
     */
    boolean updateUser(List<String> userIds,User user);

    /**
     * 通过用户ID获取详情及用户角色权限信息
     * @param userId
     * @return
     */
     UserAndRoleAndPermission getUserIdAndRoleAndPermission(String userId);

    /**
     * 通过权限ID获取详情及用户角色权限信息
     * @param perId
     * @return
     */
     List<UserAndRoleAndPermission> getUserAndRoleAndPermission(String perId);
    /**
     * 通过用户ID(类型)获取用详情及用户角色权限信息(权限角色为正常状态)
     * @param userId
     * @param route
     * @param url
     * @return
     */
     UserAndRoleAndPermission getUserAndRoleAndPermission(String userId, String route,String url);

    /**
     * 获取用户的角色及部门（包含角色tree结构）
     * @param userId
     * @return
     */
     UserAndRoleAndPermission getUserRoleDept(String userId,boolean bvol);

    /**
     * 获取用户的部门
     * @param userId
     * @return
     */
     UserAndRoleAndPermission getUserDept(String userId);

    /**
     * 修个用户头像
     * @param file
     * @return
     */
    boolean updatUserImg(MultipartFile file);

}
